跳到主要内容

使用 Uptime Kuma 和 Shell 脚本监控家庭 WiFi 网络状态并通过 Bark 推送通知

· 阅读需 5 分钟
木易(OwenYang)
互联网人、电子垃圾体验者、挨踢FEer、木易跟打器作者

Uptime Kuma

前言

在现代家庭中,稳定的 WiFi 网络是日常生活的重要组成部分。为了确保家庭网络的稳定运行,我们可以使用 Uptime Kuma 结合 Shell 脚本定期上报网络状态,并在网络掉线时通过 Bark 推送通知,让你随时掌握家庭网络状态。

本文将详细介绍如何编写 Shell 脚本,利用 Uptime Kuma 的 Push API 定期上报家庭 WiFi 网络状况,并在掉线时通过 Bark 发送推送通知。

准备工作

  1. Uptime Kuma:一个开源的自托管监控工具。
  2. Bark:一个用于 iOS 的推送通知工具。
  3. Shell 脚本:用于定期检查 WiFi AP 状态并上报。

编写 Shell 脚本

首先,我们编写一个 Shell 脚本 check_wifi_ap.sh,用于检查两个 WiFi AP 的状态并上报到 Uptime Kuma。如果任意一个 AP 掉线,将通过 Bark 发送推送通知。

#!/bin/sh

# WiFi AP 地址
AP1="192.168.4.141"
AP2="192.168.4.142"

# Bark 推送通知 URL
BARK_URL="https://api.day.app/<your_bark_key>"

# Uptime Kuma Push API URL
UPTIME_KUMA_URL="https://<your uptime domain>/api/push/xxx"

# 计算平均ping值的函数
get_avg_ping() {
ip=$1
ping_result=$(ping -c 3 "$ip" | grep 'time=' | awk -F'time=' '{print $2}' | awk '{print $1}')

if [ -z "$ping_result" ]; then
echo "9999"
return
fi

sum=0
count=0
for time in $ping_result; do
sum=$(echo "$sum + $time" | bc)
count=$((count + 1))
done

avg_ping=$(echo "scale=2; $sum / $count" | bc)
echo "$avg_ping"
}

# 获取AP1AP2的平均ping值
avg_ping1=$(get_avg_ping "$AP1")
avg_ping2=$(get_avg_ping "$AP2")

# 检查AP1ping结果
if [ "$avg_ping1" = "9999" ]; then
status="down"
msg="AP1 ($AP1) is down"
ping_value="9999"
curl -X POST "$BARK_URL/$msg" # 发送 Bark 推送通知
else
status="up"
msg="OK"
fi

# 检查AP2ping结果
if [ "$avg_ping2" = "9999" ]; then
status="down"
msg="AP2 ($AP2) is down"
ping_value="9999"
curl -X POST "$BARK_URL/$msg" # 发送 Bark 推送通知
else
# 如果AP1的Ping也是正常的则进行计算两个AP平均ping值的平均值
if [ "$ping_value" != "9999" ]; then
total_avg_ping=$(echo "scale=2; ($avg_ping1 + $avg_ping2) / 2" | bc)
ping_value="$total_avg_ping"
msg="OK"
fi
fi

# 使用curl命令上报心跳
curl -G "$UPTIME_KUMA_URL" --data-urlencode "status=$status" --data-urlencode "msg=$msg" --data-urlencode "ping=$ping_value"

# 打印结果到控制台(可选)
echo "AP1 ($AP1) 平均ping值: $avg_ping1 ms"
echo "AP2 ($AP2) 平均ping值: $avg_ping2 ms"
echo "状态: $status, 消息: $msg, 总平均ping值: $ping_value ms"

脚本说明

  1. 定义 WiFi AP 地址

    • AP1AP2 分别为两个 AP 的 IP 地址。
  2. 定义 Bark 推送通知 URL

    • BARK_URL 为 Bark 推送通知的 URL,需替换 your_bark_key 为实际的 Bark 密钥。
  3. 定义 Uptime Kuma Push API URL

    • UPTIME_KUMA_URL 为 Uptime Kuma 的 Push API URL。
  4. 计算平均 ping 值的函数

    • get_avg_ping 函数用于计算给定 IP 的平均 ping 值。
  5. 获取 AP 的平均 ping 值

    • 调用 get_avg_ping 函数获取 AP1 和 AP2 的平均 ping 值。
  6. 检查 AP 的 ping 结果

    • 如果 AP1 或 AP2 的 ping 失败,将 status 设置为 down,并发送 Bark 推送通知。
    • 如果 AP1 和 AP2 都正常,则计算它们的平均 ping 值。
  7. 上报心跳

    • 使用 curl 命令将 statusmsgping 值上报到 Uptime Kuma。
  8. 打印结果到控制台

    • 打印每个 AP 的平均 ping 值和总平均 ping 值。

定时任务

将脚本添加到 cron 中以定时运行,例如每 5 分钟运行一次:

  1. 编辑 crontab:

    crontab -e
  2. 添加以下行:

    */5 * * * * /path/to/check_wifi_ap.sh

总结

通过上述步骤,你可以使用 Uptime Kuma 和 Shell 脚本定期上报家庭 WiFi 网络状况,并在网络掉线时通过 Bark 发送推送通知。这样,你可以随时掌握家庭网络的状态,确保网络的稳定运行。